/*
 * MyMatrix.cpp
 *
 *  Created on: 04/10/2012
 *      Author: vagner
 */

#include "MyMatrix.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <new>

MyMatrix::MyMatrix() {
	//Do nothing

}

MyMatrix::MyMatrix(int linhas, int colunas){

	if(linhas > 0 && colunas > 0){

		this->numLinhas = linhas;
		this->numColunas = colunas;
		this->matrix = 0;

		this->matrix = new Item*[this->numLinhas];

		if(this->matrix == 0){
			std::cout<<"Impossivel alocar memoria! O programa será encerrado"<< std::endl;
			std::_Exit(-1);
		}


		for(int i = 0; i < this->numLinhas; i++){

			this->matrix[i] = new Item[this->numColunas];

			if(this->matrix[i] == 0){
				std::cout<< "Impossivel alocar memoria! O programa será encerrado"<< std::endl;
				std::_Exit(-1);
			}
		}
		this->inicializaMatriz();

	}


}

void MyMatrix::inicializaMatriz(void){

	for(int i = 0; i < this->numLinhas;i++){
		for(int j = 0; j < this->numColunas;j++){
			this->matrix[i][j].valor.intValor = 0;
		}
	}
}

void MyMatrix::insereItem(Item& i, int linha, int coluna){

	if( this->isIntervaloValido(linha,coluna)){

		this->matrix[linha][coluna].valor.realValor = i.valor.realValor;
		//std::cout << "Valor inserido na celula: " << linha << coluna << " " << this->matrix[linha][coluna].valor.realValor<< std::endl;
	}else{
		std::cout << "Tentativa de inserção em um posição inválida! " << "Posição ("<< linha<<","<<coluna << ")"<< std::endl;
		std::exit(-1);
	}
}

Item& MyMatrix::getItem(int linha, int coluna){

	Item* returnItem = new Item;

	returnItem->valor.intValor = -1;

	if(this->isIntervaloValido(linha,coluna)){
		*returnItem =  this->matrix[linha][coluna];
	}

	return *returnItem;

}

void MyMatrix::show()const{
	for(int i = 0; i < this->numLinhas;i++){
			for(int j = 0; j < this->numColunas;j++){
				std::cout<< matrix[i][j].valor.realValor<< " ";
			}
			std::cout<<std::endl;
	}
}
int MyMatrix::getNumLinhas(){
	return this->numLinhas;
}

int MyMatrix::getNumColunas(){
	return this-> numColunas;
}

void MyMatrix::reinicia(){
	for(int i = 0; i < numLinhas;i++){
		for(int j = 0; j < numColunas; j++){
			matrix[i][j].valor.intValor = 0;
		}
	}

}



MyMatrix::~MyMatrix() {

	//std::cout << "Executando Destruidor Matrix " <<std::endl;
	for(int i = 0; i < numLinhas; i++){
		delete [] matrix[i];
	}
	delete [] matrix;
}

